﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Dominio;

namespace PresentacionWeb.ControlesDeUsuario
{
    public partial class ABMUsuarios : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lblErrorAlta.Text = "";
            lblErrorBaja.Text = "";
            lblErrorModificacion.Text = "";
            cargarUsuarios(gvUsuarios);
            cargarUsuarios(gvUsuariosBaja);
        }

        protected void TabContainer1_ActiveTabChanged(object sender, EventArgs e)
        {
            if (TabContainer1.ActiveTab.HeaderText == "Modificacion")
                cargarUsuarios(gvUsuarios);
            else if (TabContainer1.ActiveTab.HeaderText == "Baja")
                cargarUsuarios(gvUsuariosBaja);
        }
        
        protected void cargarUsuarios(GridView gv)
        {
            Dominio.AdministracionHandler busqueda = new FabricaConcreta().getAdministracionHandler();

            try
            {

                List<BLUsuario> lista = new List<BLUsuario>();//busqueda.getBLUsuarios();

                gv.DataSource = lista;
                gv.AllowPaging = true;
                gv.AllowSorting = true;
                gv.PageSize = 10;
                gv.DataBind();

            }
            catch (Exception ex)
            {
                lblErrorModificacion.Text = "No se pudo cargar la lista de categorias. ";
                lblErrorModificacion.Text += ex.Message;
            }
        }


        protected void gvUsuarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (gvUsuarios.SelectedIndex > -1)
            {
                UCDatosUsuario ucusuario = (UCDatosUsuario)LoadControl("~/ControlesDeUsuario/UCDatosUsuario.ascx");
                BLUsuario user = new FabricaConcreta().getAdministracionHandler().getUsuarioPorUserName(gvUsuarios.Rows[gvUsuarios.SelectedIndex].Cells[3].Text);
                ucusuario.nombre = user.Nombre;
                ucusuario.apellido = user.Apellido;
                ucusuario.direccion = user.Direccion;
                ucusuario.email = user.Email;
                ucusuario.contraseña = user.Contraseña;
                ucusuario.nombreUsuario = user.Usuario;
                ucusuario.telefono = user.Telefono;
                ucusuario.confirmaContraseña = user.Contraseña;
                //ucusuario.esAdministrador = user.esAdministrador;
                //ucusuario.esGerente = user.esGerente;



                PlaceHolderUCDatosUsuarioModificacion.Controls.Add(ucusuario);

            }
        }

        protected void btnCrearUsuario_OnClick(object sender, EventArgs e)
        {
            try
            {
                AdministracionHandler adm = new FabricaConcreta().getAdministracionHandler();
                
                BLUsuario user = obtenerDatosIngresados(UCDatosUsuarioAlta);
                adm.registrarUsuario(user);
                UCDatosUsuarioAlta.clearControl();
            }
            catch (Exception ex)
            {
                lblErrorAlta.Text = "No se pudo crear el usuario. ";
                lblErrorAlta.Text += ex.Message;

            }
        }

        private BLUsuario obtenerDatosIngresados(UCDatosUsuario datosUser)
        {
            
            try
            {
                if (datosUser.apellido == "" || datosUser.contraseña == "" || datosUser.direccion == "" || datosUser.email == "" || datosUser.nombre == "" || datosUser.nombreUsuario == "" || datosUser.telefono == "")
                    throw new Exception("Tiene que ingresar datos para todos los campos.");
                if (datosUser.contraseña != datosUser.confirmaContraseña)
                    throw new Exception("La contraseña y la confirmacion de contraseña deben coincidir.");

                BLUsuario user = new BLUsuario();
                user.Nombre = datosUser.nombre;
                user.Apellido = datosUser.apellido;
                user.Direccion = datosUser.direccion;
                user.Email = datosUser.email;
                user.Usuario = datosUser.nombreUsuario;
                user.Telefono = datosUser.telefono;
                user.Contraseña = datosUser.contraseña;
                //user.esAdministrador = datosUser.esAdministrador;
                //user.esGerente = datosUser.esGerente;
                return user;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            AdministracionHandler adm = new FabricaConcreta().getAdministracionHandler();
            UCDatosUsuario datosUser = (UCDatosUsuario)PlaceHolderUCDatosUsuarioModificacion.Controls[0];
            BLUsuario user = obtenerDatosIngresados(datosUser);
            adm.modificarUsuario(user);
        }

        protected void btnEliminarUsuarios_Click(object sender, EventArgs e)
        {
            Dominio.AdministracionHandler admin = new FabricaConcreta().getAdministracionHandler();
            foreach (GridViewRow fila in gvUsuariosBaja.Rows)
            {
                CheckBox cbSelector = (CheckBox)fila.FindControl("cbSeleccionada");
                if (cbSelector != null && cbSelector.Checked)
                    try
                    {
                        admin.bajaUsuario(admin.getUsuarioPorUserName(fila.Cells[3].Text));
                        gvUsuariosBaja.DeleteRow(fila.RowIndex);
                    }
                    catch (Exception ex)
                    {
                        lblErrorBaja.Text = "No se pudo Eliminar los usuarios.";
                        lblErrorBaja.Text += " " + ex.Message;
                    }
            }
        }


    }

    
}